#include<string>
#include<signal.h>
#include<unistd.h>
#include<iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

void Set_Daemon(std::string work_path="")
{
    //忽略信号,防止守护进程被关闭
    signal(SIGSTOP,SIG_IGN);

    //创建守护进程不能是进程组的组长
    if(fork()>0)
    {
        exit(0);
    }

    if(setsid()==-1)
    {
        std::cerr<<"stesid fail"<<std::endl;
        exit(1);
    }

    std::cout<<"Daemon success"<<std::endl;

    //更改守护进程的工作目录
    if(!work_path.empty())
        chdir(work_path.c_str());

    //将测试输入输出打入到垃圾桶中
    int fd=open("/dev/null",O_WRONLY);
    dup2(fd,0);
    //dup2(fd,1);
    dup2(fd,2);

    close(fd);
}